<?php
use Application\Model\Entity\Enchere;
use Application\Model\Entity\ProduitVendu;

//return: Array
function GetLatestBid(&$oEm, $iProdId) {
    $oQuery = $oEm->createQuery('
        SELECT u.id AS userid, u.nom, u.prenom, e.montant
        FROM Application\Model\Entity\Enchere AS e, Application\Model\Entity\Utilisateur AS u
        WHERE e.produit='.$iProdId.' AND e.utilisateur=u.id
        ORDER BY e.montant DESC');
    $oQuery->setMaxResults(1);

    $aRes = $oQuery->getResult();
    return empty($aRes) ? $aRes : $aRes[0];
}

//return: Array
function Bid(&$oEm, $iUserId, &$oProduct, $iBidVal) {	
    $oQb = $oEm->createQueryBuilder();

    $oQb->select('e')
        ->from('Application\Model\Entity\Enchere', 'e')
        ->where('e.produit = ?1')
        ->orderBy('e.montant', 'desc')
        ->setParameter(1, $oProduct->getId())
        ->setMaxResults(1);
    $oQuery = $oQb->getQuery();

    $aoRes = $oQuery->getResult();

    $oRes = null;
    
    //si il y a déjà une enchère sur le produit
    if(sizeof($aoRes) > 0) {
        $oRes = $aoRes[0];
        
        //vérifier que l'utilisateur n'est pas le dernier enchérisseur
        if($oRes->getUtilisateur()->getId() == $iUserId) {
            return array('error' => 'already_bade');
        }
    }

    //si il n'y a pas d'enchère ou si l'enchère est supérieure à la derniere
    //on l'ajoute l'enchère actuelle
    if(($oRes !== null && $iBidVal > $oProduct->getPrix())
            || ($oRes !== null && $iBidVal > $oRes->getProduit()->getPrix())) {
        $oRepUtilisateur = $oEm->getRepository('Application\Model\Entity\Utilisateur');

        $oEnchere = new Enchere(
          null, // variable id de type "int". On la met à null pour faire un auto-increment
          $oRepUtilisateur->find($iUserId), // variable utilisateur de type "Application\Model\Entity\Utilisateur"
          $oProduct,
          $iBidVal, // variable montant de type "float"
          time() // variable date de type "int"
        );

        $oEm->persist($oEnchere);
        $oEm->flush();
    } else {
        //si l'enchère est inférieure ou égale à la dernière
        return array('error' => 'not_enough');
    }

    //on récupère la dernière enchère effectuée sur le produit
    $aEnchere = GetLatestBid($oEm, $oProduct->getId());

    return array(
      'e_uid' => $aEnchere['userid'],
      'e_name' => $aEnchere['prenom'].' '.$aEnchere['nom'],
      'e_montant' => $aEnchere['montant']
    );
}

//Array
function Buy(&$oEm, $iUserId, $iProdId) {
    $oQuery = $oEm->createQuery('
        SELECT pv.id
        FROM Application\Model\Entity\ProduitVendu AS pv
        WHERE pv.id='.$iProdId);
    $aRes = $oQuery->getResult();	

    if(sizeof($aRes) > 0) {
        return array('error' => 'sold');
    }
    
    $oRepUtilisateur = $oEm->getRepository('Application\Model\Entity\Utilisateur');
    $oRepProduit = $oEm->getRepository('Application\Model\Entity\Produit');

    $oProduct = $oRepProduit->find($iProdId);
    $oBoutique = $oProduct->getBoutique();

    $oProduitVendu = new ProduitVendu(
      $iProdId,
      $oProduct->getLibelle(),
      $oProduct->getDescription(),
      $oProduct->getTaille(),
      $oProduct->getPrix(), //Prix
      time(), //DateVente
      $oProduct->getPrix(), //PrixVente
      $oRepUtilisateur->find($iUserId),
      $oBoutique,
      $oProduct->getCategorie()
    );

    $oEm->persist($oProduitVendu);
    $oEm->flush();

    $oEtatVendu = $oEm->find('Application\Model\Entity\Etat', 3);

    $oProduct->setEtat($oEtatVendu); //Vendu
    $oEm->persist($oProduct);
    $oEm->flush();
    
    return array('sucess' => ''); //just to return smt
}

//layout
function TranslateMonth($date) {
    $monthfr = array(
      'Jan' => 'jan',
      'Feb' => 'fév',
      'Mar' => 'mars',
      'Apr' => 'avril',
      'May' => 'mai',
      'Jun' => 'juin',
      'Jul' => 'juil',
      'Aug' => 'août',
      'Sep' => 'sept',
      'Oct' => 'oct',
      'Nov' => 'nov',
      'Dec' => 'déc');

    $dates = explode(' ', $date);
    $dates[1] = $monthfr[$dates[1]].',';
    
    return implode(' ', $dates);
}
?>